Use case: I2C communication in DMA mode

This use case shows how to handle master and slave transmit/receive using DMA.

Sequence diagram

@startuml
  participant "User Application" as App
  participant "HAL I2C" as HAL_I2C


  == Master Transmit DMA ==
  App -> HAL_I2C: HAL_I2C_Master_Transmit_DMA(&hi2c2, 0x30F, aTxBuffer, 128)


  == Master Receive DMA ==
  App -> HAL_I2C: HAL_I2C_Master_Receive_DMA(&hi2c2, 0x30F, aRxBuffer, 128)


  == Slave Receive DMA ==
  App -> HAL_I2C: HAL_I2C_Slave_Receive_DMA(&hi2c2, aRxBuffer, 128)



  == Slave Transmit DMA ==
  App -> HAL_I2C: HAL_I2C_Slave_Transmit_DMA(&hi2c2, aTxBuffer, 128)


  @enduml

Code snippet

HAL1

HAL2

#define I2C_ADDRESS          0x30F;
HAL_I2C_Master_Transmit_DMA(&hi2c2, 0x30F, aTxBuffer, 128);

HAL_I2C_Master_Receive_DMA(&hi2c2, 0x30F,aRxBuffer, 128);

HAL_I2C_Slave_Receive_DMA(&hi2c2, aRxBuffer, 128);

HAL_I2C_Slave_Transmit_DMA(&hi2c2, aTxBuffer, 128);
#define I2C_ADDRESS          0x30F;
HAL_I2C_MASTER_Transmit_DMA(&hi2cx, 0x30F, TxBuffer, NumData);

HAL_I2C_MASTER_Receive_DMA(&hi2cx, I2C_SlaveAddress[Adr_Idx], RxBuffer, NumData);

HAL_I2C_SLAVE_Receive_DMA(&hi2cx, RxBuffer, NumData);

HAL_I2C_SLAVE_Transmit_DMA(&hi2cx, TxBuffer, NumData);

Key changes

  1. HAL2 uses renamed I2C DMA APIs (for example, HAL_I2C_MASTER_Transmit_DMA() instead of HAL_I2C_Master_Transmit_DMA()).